package com.guoxue.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Date;
import java.util.logging.Logger;

import org.springframework.stereotype.Component;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;

/**
 * <p>
 * OSS 文件服务器基本操作
 * </p>
 * 
 * @author zhangpeng
 * @Date 2016-07-26 16:15:00
 */
@Component
public class OSSUtil {

	private static final String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
	private static final String accessKeyId = "7gfewy59CJtiayDX";
	private static final String accessKeySecret = "rBRjklkf5mFrIUt6Bmz7rwmcAsuu3A";
	private OSSClient client = null;

	/**
	 * 初始化OSS连接
	 */
	private void init() {
		client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
	}
	/**
	 * 删除节点
	 * 
	 * @param bucketName
	 *            节点名称
	 */
	public void deleteBucket(String bucketName) {
		init();
		client.deleteBucket(bucketName);
	}

	/**
	 * 创建节点
	 * 
	 * @param bucketName
	 *            节点名称
	 */
	public void createBucket(String bucketName) {
		init();
		client.createBucket(bucketName);
	}

	/**
	 * 上传到某个节点下的文件
	 * 
	 * @param bucketName
	 *            节点名称
	 * @param key
	 *            上传文件key（自己设置）
	 * @param inputStream
	 *            文件流
	 */
	public void putObject(String bucketName, String key, InputStream inputStream) {
		init();
		client.putObject(bucketName, key, inputStream);
	}

	/**
	 * 下载某个节点下的文件
	 * 
	 * @param bucketName
	 *            节点名称
	 * @param key
	 *            上传文件key（自己设置）
	 * @param localPath
	 *            文件存放路径
	 */
	public void getObject(String bucketName, String key, String localPath) {
		init();
		client.getObject(new GetObjectRequest(bucketName, key), new File(localPath));
	}
	
	public String getInputStream(String bucketName, String key){
		init();
		OSSObject ossObject = client.getObject(bucketName, key);
		InputStreamReader in = new InputStreamReader(ossObject.getObjectContent());
		BufferedReader reader = new BufferedReader(in);
		StringBuffer sb = new StringBuffer();
		try {
		while (true) {
		    String line;
			line = reader.readLine();
			if (line == null) break;
			sb.append(line);
			}
			}catch (Exception e) {
				LoggerUtil.error(e);
			}finally {
				try {
					in.close();
					reader.close();
				} catch (IOException e) {
					LoggerUtil.error(e);
				}
			}
		return sb.toString();
	}
	/**
	 * 删除某个节点下的文件
	 * 
	 * @param bucketName
	 *        节点名称
	 * @param key
	 *        上传文件key（自己设置）
	 *
	 */
	public void deleteObject(String bucketName, String key) {
		init();
		client.deleteObject(bucketName, key);
	}
	
	/**
	 * 
	 * @param bucketName 节点名称
	 * @param key 文件key
	 * @param expiration 文件过期时间
	 * @return String url 外网访问地址
	 */
	public  String getUrl(String bucketName, String key,Date expiration) {
		// 设置URL过期时间为10年 3600* 1000*24*365*10
		//Date expiration = new Date(new Date().getTime() + 3600 * 1000 * 24 * 365 * 10);
		// 生成URL
		init();
		URL url = client.generatePresignedUrl(bucketName, key, expiration);
		if (url != null) {
			return url.toString();
		}
		return null;
	}

}
